算法可以没有输入,但是必须有输出。
和具有相同的增长速度。
将个元素存入用长度为的数组表示的散列表,则该表的装填因子为。
对于顺序存储的长度为的线性表,访问结点和增加结点的时间复杂度分别对应为和。
在具有个结点的单链表中,访问结点和增加结点的时间复杂度分别对应为和。
链表 - 存储结构
链表中逻辑上相邻的元素,其物理位置也一定相邻。
若一个栈的输入序列为1,2,3,…,,输出序列的第一个元素是,则第个输出元素是。
在用数组表示的循环队列中,front值一定小于等于rear值。
在实现二项式队列时,每棵二项式树的子树是按规模递增的顺序链接的。
某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。
若A和B都是一棵二叉树的叶子结点,则存在这样的二叉树,其前序遍历序列为...A...B...,而中序遍历序列为...B...A...。
一棵有124个结点的完全二叉树,其叶结点个数是确定的。
二叉树就是度为二的有序树。
在一棵由包含4、5、6等等一系列整数结点构成的二叉搜索树中,如果结点4和6在树的同一层,那么可以断定结点5一定是结点4和6的父亲结点。
将1、2、3、4、5、6顺序插入初始为空的AVL树中,当完成这6个元素的插入后,该AVL树的先序遍历结果是:4、2、1、3、5、6。
对一棵平衡二叉树,所有非叶结点的平衡因子都是0,当且仅当该树是完全二叉树。
任何最小堆的前序遍历结果是有序的(从小到大)。
对()个权值均不相同的字符构造哈夫曼树,则树中任一非叶结点的权值一定不小于下一层任一结点的权值。
如果无向图G必须进行两次广度优先搜索才能访问其所有顶点,则G一定有2个连通分量。
无向连通图所有顶点的度之和为偶数。
用邻接表法存储图,占用的存储空间数只与图中结点个数有关,而与边数无关。
在任一有向图中,所有顶点的入度之和等于所有顶点的出度之和。
Kruskal 算法是通过每步添加一条边及其相连的顶点到一棵树,从而逐步生成最小生成树。
对于带权无向图 G = (V, E),M 是 G 的最小生成树,则 M 中任意两点 V1 到 V2 的路径一定是它们之间的最短路径。
若图G有环,则G不存在拓扑排序序列。
对个记录进行简单选择排序,比较次数和移动次数分别为和。
希尔排序是稳定的算法。
对个记录进行堆排序,需要的额外空间为。
在散列表中,所谓同义词就是具有相同散列地址的两个元素。
KMP算法的最大特点是指示主串的指针不需要回溯
排序算法的稳定性
下列关于顺序表的排序算法中,▁▁▁▁▁ 是稳定的。
关于二分查找算法
二分查找算法能适用于 ▁▁▁▁▁ 。
以下说法错误的是( )。
下面结构中适于表示稀疏有向图的是( ) 。
图的深度优先搜索(DFS)使用了一种数据结构,这种数据结构是
给定一组整数:
{ 36, 25, 81, 17, 49 }
采用快速排序法按升序排序,请写出将首个元素作为枢轴(支点)经过一趟排序后的结果:
{ 1分, 1分, 1分, 1分, 1分 }
下列代码的功能是从一个大顶堆H的某个指定位置p开始执行下滤。
void PercolateDown( int p, PriorityQueue H )
{
int child;
ElementType Tmp = H->Elements[p];
for ( ; p * 2 <= H->Size; p = child ) {
child = p * 2;
if ( child!=H->Size && 3分 )
child++;
if ( H->Elements[child] > Tmp )
3分;
else break;
}
H->Elements[p] = Tmp;
}
下列代码的功能是从大顶堆H中删除指定位置p上的元素,然后继续调整为大顶堆。
Deletion ( PriorityQueue H, int p ) /* delete the element H->Elements[p] */
{
ElementType temp;
int child;
temp = H-> Elements[ H->Size-- ];
if ( temp > H->Elements[p] ) {
while ( (p != 1) && (temp > H->Elements[p/2]) ) {
3分;
p /= 2;
}
}
else {
while( (child = 2*p) <= H->Size) {
if ( child != H->Size && 3分 )
child ++;
if ( 3分 ) {
H->Elements[p] = H->Elements[child];
p = child;
}
else
break;
}
}
H->Elements[p] = temp;
}
下列代码的功能是返回带头结点的单链表L的逆转链表。
List Reverse( List L )
{
Position Old_head, New_head, Temp;
New_head = NULL;
Old_head = L->Next;
while ( Old_head ) {
Temp = Old_head->Next;
3分;
New_head = Old_head;
Old_head = Temp;
}
3分;
return L;
}
下列代码的功能是将二叉树T中的结点按照层序遍历的顺序输出。
typedef struct TreeNode *Tree;
struct TreeNode
{
int Key;
Tree Left;
Tree Right;
};
void Level_order ( Tree T )
{
Queue Q;
if ( !T ) return;
Q = CreateQueue( MaxElements );
Enqueue( T, Q );
while ( !IsEmpty( Q ) ){
T = Front_Dequeue ( Q ); /* return the front element and delete it from Q */
printf("%d ", T->Key);
if ( T->Left )
3分;
if ( 3分 )
3分;
}
}